class_name StateMachine

extends Node

# int默认是0，在开始的初始化时会有一个从0到0的一个奇怪状态，所以设置一个初始-1来避免
var current_state: int = -1:
	set(v):
		# owner代表当前节点的父节点，Player类中需要实现transition_state方法
		owner.transition_state(current_state, v)
		current_state = v


func _ready() -> void:
	# godot 中 ready 函数是所有子节点先开始之后才是父节点
	#，父节点没有初始化完成后就去调用父类中的方法就会报错
	#，在这里等待父节点准备完成后再进行状态机的转换
	await  owner.ready
	current_state = 0
	
func _physics_process(delta: float) -> void:
	while true:
		var next := owner.get_next_state(current_state) as int
		if current_state == next:
			break
		current_state = next
		
	owner.tick_physics(current_state,delta)
	
	
